from PIL import Image, ImageDraw, ImageFont
import os

def add_book_name_to_image(text, output, font_size=250, line_spacing=1.5):
    """将文字竖排添加到图片中
    Args:
        text: 书名
        output: 输出图片路径
        font_size: 字体大小
        line_spacing: 行间距倍数
    Returns:
        PIL.Image: 处理后的图片对象
    """
    try:
        # 固定使用模板目录下的base.jpg
        image_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'template', 'OEBPS', 'Images', 'cover.jpg')
        # 打开图片
        img = Image.open(image_path)
        
        draw = ImageDraw.Draw(img)
        
        # 优先使用模板目录下的字体
        template_font = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'template', 'OEBPS', 'Fonts', 'Kai.ttf')
        if os.path.exists(template_font):
            font_path = template_font
        else:
            # 回退到系统字体
            font_path = os.path.join(os.environ['WINDIR'], 'Fonts', 'simhei.ttf')
            if not os.path.exists(font_path):
                font_path = os.path.join(os.environ['WINDIR'], 'Fonts', 'simsun.ttc')
        
        # 创建字体对象
        font = ImageFont.truetype(font_path, font_size)
        
        img_width, img_height = img.size
        
        # 分行处理
        # 计算文字分行
        lines = []
        if len(text) < 4:
            # 小于4个字符时作为一行
            lines.append(text)
        elif len(text) == 4:
            # 4个字符时每行2个字符
            lines.append(text[0:2])
            lines.append(text[2:4])
        else:
            # 大于4个字符时，每行3个字符
            for i in range(0, len(text), 3):
                if i + 3 <= len(text):
                    lines.append(text[i:i+3])
                else:
                    lines.append(text[i:])  # 最后不足3个字符的单独一行
        
        # 确定文字位置（使用百分比）
        if len(lines) == 1:
            position = (50, 30)  
        elif len(lines) == 2:
            position = (55, 25)  
        elif len(lines) == 3:
            position = (65, 20) 
        else:
            position = (70, 20)  
        
        # 将百分比转换为实际坐标
        x = int(img_width * position[0] / 100)
        y = int(img_height * position[1] / 100 - (len(lines[0]) * font_size * line_spacing) / 2)
        
        # 绘制竖排文字
        line_width = font_size * 1.2
        for i, line in enumerate(lines):
            line_x = x - i * line_width
            # 每行比上一行低一个字符的高度
            current_y = y + (i * font_size * line_spacing)
            for char in line:
                draw.text((line_x, current_y), char, font=font, fill=(0, 0, 0))
                current_y += font_size * line_spacing
        img.save(output)
    except Exception as e:
        print(f"在封面图片上添加书名时出错：{str(e)}")

# 修改测试参数
if __name__ == '__main__':
    test_params = {
        'text': '混在墨西哥当警察啊卖毒品',
        'output': 'cover_with_text.jpg'
    }
    
    print(f"添加文字：{test_params['text']}")
    
    # 添加竖排文字
    img_with_text = add_book_name_to_image(
        test_params['text'],
        test_params['output']
    )
    
    print(f"已保存处理后的图片：{test_params['output']}")